/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GuiList.java
 *
 * Created on 27/11/2011, 12:56:24
 */

package GUI;

import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import tp1POO.GestorLog;
import tp1POO.Modelo.Cliente;
import tp1POO.Modelo.Funcionario;
import tp1POO.Modelo.Locacao;
import tp1POO.Modelo.Motorista;
import tp1POO.Modelo.ObjetoPOO;
import tp1POO.Modelo.Tipo;
import tp1POO.Modelo.Veiculo;
import tp1POO.Persistencia.GerenciadorObjetos;
import tp1POO.Persistencia.Pesquisa;

/**
 * @author matheus
 */
public class GuiList extends javax.swing.JFrame {

	/** Creates new form GuiList */
	public GuiList() {
		initComponents();
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable = new javax.swing.JTable();
        jCOpcoes = new javax.swing.JComboBox();
        jBList = new javax.swing.JButton();
        jBFechar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Listar Componentes");

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));

        jTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(jTable);

        jCOpcoes.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Clientes", "Motoristas", "Veículos", "Funcionários", "Tipos de Locação", "Locações" }));

        jBList.setText("Listar");
        jBList.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBListActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jCOpcoes, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jBList, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 739, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(15, 15, 15)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jCOpcoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBList))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(22, Short.MAX_VALUE))
        );

        jBFechar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/icoErro.gif"))); // NOI18N
        jBFechar.setText("Fechar");
        jBFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBFecharActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jBFechar)
                        .addGap(35, 35, 35))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBFechar)
                .addContainerGap(15, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents



	private void formataTabela () {
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

		while (modelo.getRowCount()>0) {
			modelo.removeRow(0);
		}
		modelo.setColumnCount(0);
		return;
	}

	private void carregaVeiculos () {
		Veiculo veiculo = new Veiculo(" ");
		Vector<ObjetoPOO> obj = GerenciadorObjetos.obterInstancia().obterObjs(veiculo);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

		modelo.addColumn("Marca");
		modelo.addColumn("Modelo");
		modelo.addColumn("Cor");
		modelo.addColumn("Placa");
		modelo.addColumn("Opcionais");
		modelo.addColumn("Tipo");
		if (obj.size()!=0) {
			for (int i=0;i<obj.size();i++) {
				veiculo = (Veiculo)obj.get(i);
				modelo.addRow(new String[] {veiculo.getMarca(),veiculo.getModelo(),veiculo.getCor(),veiculo.getPlaca(),veiculo.getOpcionais(),veiculo.getTipoVeiculo().getNome()});
			}
		}
	}


	private void carregaClientes () {
		Cliente objeto = new Cliente(" ");
		Vector<ObjetoPOO> obj = GerenciadorObjetos.obterInstancia().obterObjs(objeto);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

		modelo.addColumn("Nome");
		modelo.addColumn("CPF");
		modelo.addColumn("Endereço");
		modelo.addColumn("Telefone");
		modelo.addColumn("N. de Locações");
		if (obj.size()!=0) {
			for (int i=0;i<obj.size();i++) {
				objeto = (Cliente)obj.get(i);
				modelo.addRow(new String[] {objeto.getNome(),objeto.getCpf(),objeto.getEndereco(),objeto.getTelefone(),String.valueOf(objeto.getLocacoes().size())});
			}
		}
	}


	private void carregaMotoristas () {
		Motorista objeto = new Motorista(" ");
		Vector<ObjetoPOO> obj = GerenciadorObjetos.obterInstancia().obterObjs(objeto);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();
		String locAtual="";

		modelo.addColumn("Nome");
		modelo.addColumn("CPF");
		modelo.addColumn("CNH");
		modelo.addColumn("Endereço");
		modelo.addColumn("Telefone");
		modelo.addColumn("Possui Loc. atual");
		if (obj.size()!=0) {
			for (int i=0;i<obj.size();i++) {
				objeto = (Motorista)obj.get(i);
				if (objeto.getLocacao()!=null)
					locAtual = "Sim";
				else
					locAtual = "Não";
				modelo.addRow(new String[] {objeto.getNome(),objeto.getCpf(),objeto.getCNH(),objeto.getEndereco(),objeto.getTelefone(),locAtual});
			}
		}
	}


	private void carregaFuncionario () {
		Funcionario objeto = new Funcionario(Funcionario.Cargo.Auxiliar);
		Vector<ObjetoPOO> obj = GerenciadorObjetos.obterInstancia().obterObjs(objeto);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

		modelo.addColumn("Nome");
		modelo.addColumn("CPF");
		modelo.addColumn("Endereço");
		modelo.addColumn("Telefone");
		modelo.addColumn("Cargo");
		if (obj.size()!=0) {
			for (int i=0;i<obj.size();i++) {
				objeto = (Funcionario)obj.get(i);
				modelo.addRow(new String[] {objeto.getNome(),objeto.getCpf(),objeto.getEndereco(),objeto.getTelefone(),objeto.getCargo().toString()});
			}
		}
	}

	private void carregaTipos () {
		Tipo objeto = new Tipo(" ");
		Vector<ObjetoPOO> obj = GerenciadorObjetos.obterInstancia().obterObjs(objeto);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();

		modelo.addColumn("Nome");
		modelo.addColumn("Taxa Base");
		modelo.addColumn("Preço por Km");
		if (obj.size()!=0) {
			for (int i=0;i<obj.size();i++) {
				objeto = (Tipo)obj.get(i);
				modelo.addRow(new String[] {objeto.getNome(),String.valueOf(objeto.getTaxaBase()),String.valueOf(objeto.getPrecoQuilometro())});
			}
		}
	}


	private void carregaLocacao () {
		Locacao loc = new Locacao(new Veiculo(" "), new Cliente());
		Vector<ObjetoPOO> locacoes = GerenciadorObjetos.obterInstancia().obterObjs(loc);
		DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();
		String estadoAtual = "";

		modelo.addColumn("Cliente");
		modelo.addColumn("Marca");
		modelo.addColumn("Modelo");
		modelo.addColumn("Data de Saída");
		modelo.addColumn("Data de Devolução");
		modelo.addColumn("Valor");

		if (locacoes.size()!=0) {
			for (int i=0;i<locacoes.size();i++) {
				loc = (Locacao)locacoes.get(i);
				if (loc.getValor()!=0)
					estadoAtual = loc.getDataDevolucao();
				else
					estadoAtual = "--";
				modelo.addRow(new String[] {loc.getLocador().getNome(), loc.getVeiculo().getMarca(), loc.getVeiculo().getModelo(), loc.getDataSaida(),estadoAtual,String.valueOf(loc.getValor())});
			}
		}
	}
















	private void jBListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBListActionPerformed
		int opcao = jCOpcoes.getSelectedIndex();
		formataTabela();
		GestorLog.obterInstancia().inserirMsgLog((String)jCOpcoes.getSelectedItem()+" listados(as) ("+GuiCreator.obterInstancia().getGuiFuncionalidades().getFuncionario().getCpf()+")");
		switch(opcao) {
		case 0: carregaClientes(); break;
		case 1: carregaMotoristas(); break;
		case 2: carregaVeiculos();break;
		case 3: carregaFuncionario(); break;
		case 4: carregaTipos();break;
		case 5: carregaLocacao();break;
		}
	}//GEN-LAST:event_jBListActionPerformed

	private void jBFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBFecharActionPerformed
		GestorLog.obterInstancia().inserirMsgLog("Funcionalidade de Listar foi fechada("+GuiCreator.obterInstancia().getGuiFuncionalidades().getFuncionario().getCpf()+")");
		GuiCreator.obterInstancia().removerGuiList();
	}//GEN-LAST:event_jBFecharActionPerformed




























	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new GuiList().setVisible(true);
			}
		});
	}

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBFechar;
    private javax.swing.JButton jBList;
    private javax.swing.JComboBox jCOpcoes;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable;
    // End of variables declaration//GEN-END:variables

}
